package br.com.senac.pi5.dao;

import br.com.senac.pi5.connection.ConexaoDB;
import br.com.senac.pi5.bean.Cliente;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ClienteDao {

    static PreparedStatement ps;
    // a conexão com o banco de dados
    private final Connection conexao;

    public ClienteDao() throws SQLException {
        this.conexao = new ConexaoDB().getConexao();
    }

    public void adiciona(Cliente cliente) throws SQLException {

        // prepara a conexão
        String sql = "insert into cliente(nome , sobrenome , sexo , rg , cpf , endereco , num , complemento , bairro , dt_nasc , cidade , estado , cep , tel , email , senha) values ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ?)";

        try (PreparedStatement stmt = conexao.prepareStatement(sql)) {

            stmt.setString(1, cliente.getNome());
            stmt.setString(2, cliente.getSobrenome());
            stmt.setString(3, cliente.getSexo());
            stmt.setString(4, cliente.getRg());
            stmt.setString(5, cliente.getCpf());
            stmt.setString(6, cliente.getEndereco());
            stmt.setLong(7, cliente.getNumero());
            stmt.setString(8, cliente.getComplemento());
            stmt.setString(9, cliente.getBairro());
            stmt.setString(10, cliente.getDt_nasc());
            stmt.setString(11, cliente.getCidade());
            stmt.setString(12, cliente.getEstado());
            stmt.setString(13, cliente.getCep());
            stmt.setString(14, cliente.getTel());
            stmt.setString(15, cliente.getEmail());
            stmt.setString(16, cliente.getSenha());

            //Executa o código SQL
            stmt.execute();
            stmt.close();
        }

    }

    public Cliente autentica(String email, String senha) throws SQLException {
        // prepara a conexão
        String sql = "select * from Cliente where email = '" + email + "' and senha = '" + senha + "' and ROWNUM <= 1";

        PreparedStatement preparedStatement = conexao.prepareStatement(sql);
        ResultSet rs = preparedStatement.executeQuery(sql);

        Cliente cliente = new Cliente();

        while (rs.next()) {
            cliente.setNome(rs.getString("NOME"));
            cliente.setSobrenome(rs.getString("SOBRENOME"));
            cliente.setSexo(rs.getString("SEXO"));
            cliente.setRg(rs.getString("RG"));
            cliente.setCpf(rs.getString("CPF"));
            cliente.setEndereco(rs.getString("ENDERECO"));
            cliente.setNumero(Long.getLong("NUM"));
            cliente.setComplemento(rs.getString("COMPLEMENTO"));
            cliente.setBairro(rs.getString("BAIRRO"));
            cliente.setDt_nasc(rs.getString("DT_NASC"));
            cliente.setCidade(rs.getString("CIDADE"));
            cliente.setEstado(rs.getString("ESTADO"));
            cliente.setCep(rs.getString("CEP"));
            cliente.setTel(rs.getString("TEL"));
            cliente.setEmail(rs.getString("EMAIL"));
            cliente.setSenha(rs.getString("SENHA"));
        }
        return cliente;
    }

    public void altera(Cliente cliente) throws SQLException {
        String sql = "update Cliente set nome = ? , sobrenome = ? , sexo = ? , rg = ? , cpf = ? , endereco = ? , num = ? , complemento = ? , bairro = ? , dt_nasc = ? , cidade = ? , estado = ? , cep = ? , tel = ? , email = ? , senha = ? where id = ?";

        try (PreparedStatement stmt = this.conexao.prepareStatement(sql)) {
            stmt.setString(1, cliente.getNome());
            stmt.setString(2, cliente.getSobrenome());
            stmt.setString(3, cliente.getSexo());
            stmt.setString(4, cliente.getRg());
            stmt.setString(5, cliente.getCpf());
            stmt.setString(6, cliente.getEndereco());
            stmt.setLong(7, cliente.getNumero());
            stmt.setString(8, cliente.getComplemento());
            stmt.setString(9, cliente.getBairro());
            stmt.setString(10, cliente.getDt_nasc());
            stmt.setString(11, cliente.getCidade());
            stmt.setString(12, cliente.getEstado());
            stmt.setString(13, cliente.getCep());
            stmt.setString(14, cliente.getTel());
            stmt.setString(15, cliente.getEmail());
            stmt.setString(16, cliente.getSenha());
            stmt.setLong(19, cliente.getId());

            //executar a query
            stmt.execute();
            stmt.close();
        }
    }
}
